﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using BusinessLogicLayer;
using Equin.ApplicationFramework;

namespace PresentationLayer
{
    public partial class TTCTMuonSachForm : DevComponents.DotNetBar.OfficeForm
    {
        public PhieuMuon PhieuMuon { get; set; }
        public List<ChiTietPhieuMuon> DsCTPM { get; set; }

        public TTCTMuonSachForm()
        {
            InitializeComponent();
            dgvChiTietPhieuMuon.AutoGenerateColumns = false;
        }

        private void TTCTMuonSachForm_Load(object sender, EventArgs e)
        {
            btnLoadCTMS_Click(btnLoadCTMS, new EventArgs());
        }

        private void btnLoadCTMS_Click(object sender, EventArgs e)
        {
            ActionResultAsList<ChiTietPhieuMuon> rs = new MuonSachManager().LayCTPMTheoMaPM(PhieuMuon.MaPhieuMuon);
            if (rs.Success)
            {
                dgvChiTietPhieuMuon.DataSource = new BindingListView<ChiTietPhieuMuon>(rs.ObjectList);
                DsCTPM = rs.ObjectList;
            }
            else
                MessageBox.Show("Xảy ra lỗi!\n\nChi tiết: " + rs.Exceptions[rs.Exceptions.Count - 1].Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        private void btnXoaCTMS_Click(object sender, EventArgs e)
        {
            if (dgvChiTietPhieuMuon.SelectedRows.Count != 0)
            {
                int maPM = Convert.ToInt32(dgvChiTietPhieuMuon.SelectedRows[0].Cells["MaPhieuMuon"].Value);
                string maSach = dgvChiTietPhieuMuon.SelectedRows[0].Cells["MaSach"].Value.ToString();
                if (MessageBox.Show(String.Format("Bạn muốn xóa chi tiết phiếu mượn [{0:00000} - {1}]?", maPM, maSach), "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    ChiTietPhieuMuon ctpm = DsCTPM.Find(p => p.MaPhieuMuon == maPM && p.MaSach == maSach);
                    ActionResult rs = new MuonSachManager().XoaCTPhieuMuon(ctpm);
                    if (rs.Success)
                    {
                        CapNhatDSCTPhieuMuon(LoaiHanhDong.Xoa, ctpm);
                        MessageBox.Show("Xóa thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                        MessageBox.Show("Xóa thất bại!\n\nChi tiết: " + rs.Exceptions[rs.Exceptions.Count - 1].Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void CapNhatDSCTPhieuMuon(LoaiHanhDong hd, ChiTietPhieuMuon ctpm)
        {
            switch (hd)
            {
                case LoaiHanhDong.Them:
                    DsCTPM.Add(ctpm);
                    PhieuMuon.ChiTietPhieuMuons=DsCTPM;
                    dgvChiTietPhieuMuon.DataSource = new BindingListView<ChiTietPhieuMuon>(DsCTPM);
                    break;
                case LoaiHanhDong.Xoa:
                    DsCTPM.Remove(ctpm);
                    PhieuMuon.ChiTietPhieuMuons = DsCTPM;
                    dgvChiTietPhieuMuon.DataSource = new BindingListView<ChiTietPhieuMuon>(DsCTPM);
                    break;
                case LoaiHanhDong.CapNhat:
                    int index = DsCTPM.FindIndex(p => p.MaPhieuMuon == ctpm.MaPhieuMuon && p.MaSach == ctpm.MaSach);
                    DsCTPM[index] = ctpm;
                    PhieuMuon.ChiTietPhieuMuons = DsCTPM;
                    dgvChiTietPhieuMuon.DataSource = new BindingListView<ChiTietPhieuMuon>(DsCTPM);
                    break;
                default:
                    break;
            }
        }

        private void btnThemCTMS_Click(object sender, EventArgs e)
        {
            ThemCTMuonSachForm f = new ThemCTMuonSachForm();
            f.PhieuMuon = PhieuMuon;
            f.PhuongThucCapNhatDS = new CapNhatDSCT(CapNhatDSCTPhieuMuon);
            f.ShowDialog();
        }

        private void btnTraCTMS_Click(object sender, EventArgs e)
        {
            if (dgvChiTietPhieuMuon.SelectedRows.Count != 0)
            {
                int maPM = Convert.ToInt32(dgvChiTietPhieuMuon.SelectedRows[0].Cells["MaPhieuMuon"].Value);
                string maSach = dgvChiTietPhieuMuon.SelectedRows[0].Cells["MaSach"].Value.ToString();
                if (MessageBox.Show(String.Format("Bạn muốn trả sách cho chi tiết phiếu mượn [{0:00000} - {1}]?", maPM, maSach), "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    ChiTietPhieuMuon ctpm = DsCTPM.Find(p => p.MaPhieuMuon == maPM && p.MaSach == maSach);
                    if(KTraQuaHanTra(ctpm))
                        MessageBox.Show("Trả sách trễ hạn!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    ActionResult rs = new MuonSachManager().TraCTPhieuMuon(ctpm);
                    if (rs.Success)
                    {
                        ctpm.NgayTra = DateTime.Now;
                        CapNhatDSCTPhieuMuon(LoaiHanhDong.CapNhat, ctpm);
                        MessageBox.Show("Trả sách thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                        MessageBox.Show("Trả sách thất bại!\n\nChi tiết: " + rs.Exceptions[rs.Exceptions.Count - 1].Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void btnGiaHanCTMS_Click(object sender, EventArgs e)
        {
            if (dgvChiTietPhieuMuon.SelectedRows.Count != 0)
            {
                int maPM = Convert.ToInt32(dgvChiTietPhieuMuon.SelectedRows[0].Cells["MaPhieuMuon"].Value);
                string maSach = dgvChiTietPhieuMuon.SelectedRows[0].Cells["MaSach"].Value.ToString();
                if (MessageBox.Show(String.Format("Bạn muốn gia hạn cho chi tiết phiếu mượn [{0:00000} - {1}]?", maPM, maSach), "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    ChiTietPhieuMuon ctpm = DsCTPM.Find(p => p.MaPhieuMuon == maPM && p.MaSach == maSach);
                    if (KTraQuaHanTra(ctpm))
                        MessageBox.Show("Đã quá hạn trả, không thể gia hạn!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    else
                    {
                        ActionResult rs = new MuonSachManager().GiaHanCTPhieuMuon(ctpm);
                        if (rs.Success)
                        {
                            ctpm.HanTra = ctpm.HanTra.AddDays(7);
                            CapNhatDSCTPhieuMuon(LoaiHanhDong.CapNhat, ctpm);
                            MessageBox.Show("Gia hạn thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        else
                            MessageBox.Show("Gia hạn thất bại!\n\nChi tiết: " + rs.Exceptions[rs.Exceptions.Count - 1].Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
        }

        private bool KTraQuaHanTra(ChiTietPhieuMuon ctpm)
        {
            ValidateResult rs = new MuonSachManager().KTraHanTra(ctpm);
            return !rs.Valid;
        }

        private void tsmiThemCTMS_Click(object sender, EventArgs e)
        {
            btnThemCTMS_Click(btnThemCTMS, new EventArgs());
        }

        private void tsmiXoaCTMS_Click(object sender, EventArgs e)
        {
            btnXoaCTMS_Click(btnXoaCTMS, new EventArgs());
        }

        private void tsmiTraSach_Click(object sender, EventArgs e)
        {
            btnTraCTMS_Click(btnTraCTMS, new EventArgs());
        }

        private void tsmiGiaHan_Click(object sender, EventArgs e)
        {
            btnGiaHanCTMS_Click(btnGiaHanCTMS, new EventArgs());
        }

        private void dgvChiTietPhieuMuon_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete)
                btnXoaCTMS_Click(btnXoaCTMS, new EventArgs());
        }
    }
}